function isFn(fn){
	return typeof fn == "function" ;
}

let frequency = {
	delayOnce : 300 ,
	once : 300
} ;

function setConfig(myConfig = {} ){
	Object.assign(frequency , myConfig) ;
}

/**
 * @description 防抖，防止函数在延时时间内只执行一次，如在此期间多次触发，则延时时间重新计时。
 * @param {Function} fn 要执行的回调函数 
 * @param {Number} delay 延时的时间，单位ms
 */
let delayOnceTimer = null;
function delayOnce( fn , delay = frequency.delayOnce ) {
	// 清除定时器
	clearTimeout(delayOnceTimer);
	delayOnceTimer = setTimeout( ()=>{
		isFn(fn) && fn() ;
	}, delay );
}


/**
 * @description 节流，在延迟时间内，先执行一次，且仅允许执行一次，其他请求忽略，不执行
 * @param {Function} fn 即将执行的函数 
 * @param {Number} delay 延时的时间
 */
let onceTimer = null ;
let canExcute = true ;
function once( fn , delay = frequency.once ) {
	if (canExcute) {
		canExcute = false ;
		isFn(fn) && fn() ;
		onceTimer = setTimeout(() => {
			canExcute = true ;
		}, delay );
	}
};

export default {
	delayOnce ,
	once ,
	setConfig
}